package org.ala.tiktools.rpc.spring;

/**
 * @author ala
 * @date 2025-04-04 23:03
 */
//@Configuration
public class RpcBeanConfiguration {
    /**
     *  默认的 LoadBalance bean名字
     *  <p> BeanDefined在 RpcBeanRegisterPostProcessor 里定义
     */
    public static final String BEAN_LOAD_BALANCE = "DEFAULT_ALA_RPC_LOAD_BALANCE";
    /**
     *  默认的 NodeCreator bean名字
     *  <p> BeanDefined在 RpcBeanRegisterPostProcessor 里定义
     */
    public static final String BEAN_NODE_CREATOR = "DEFAULT_ALA_RPC_NODE_CREATOR";
    /**
     *  默认的 ISelector bean名字
     *  <p> BeanDefined在 RpcBeanRegisterPostProcessor 里定义
     */
    public static final String BEAN_NODE_SELECTOR = "DEFAULT_ALA_RPC_NODE_SELECTOR";
    /**
     * 	默认的 SerializeThreadPool bean名字
     */
    public static final String BEAN_SERIALIZER_THREAD_POOL = "DEFAULT_SERIALIZER_THREAD_POOL";
    /**
     * 	发送端拦截器链的bean名字
     */
    public static final String BEAN_INTERCEPTOR_SENDER_CHAIN = "DEFAULT_INTERCEPTOR_SENDER_CHAIN";
    /**
     * 	接收端发送端拦截器链的bean名字
     */
    public static final String BEAN_INTERCEPTOR_RECEIVER_CHAIN = "DEFAULT_INTERCEPTOR_RECEIVER_CHAIN";
    /**
     * 	默认的服务端执行器bean名字
     */
    public static final String BEAN_RPC_SERVICE_EXECUTOR = "DEFAULT_RPC_SERVICE_EXECUTOR";
    /**
     * 	默认的服务端接收器bean名字
     */
    public static final String BEAN_RPC_SERVICE_RECEIVER = "DEFAULT_RPC_SERVICE_RECEIVER";


    //	放PostProcessor里了
//    /**
//     *  初始化 AlaRpcService
//     */
//    @Bean("rpcServiceExecutor")
//    @Lazy(false)
//    public RpcServiceExecutor rpcServiceExecutor() {
//        return new RpcServiceExecutor();
//    }
//
//
//    /**
//     * 初始化接收器（netty服务端）
//     * <p>  需要保证实现端自己的配置已经解析完毕才能执行
//     */
//    @Bean("rpcServiceReceiver")
//    @Lazy(false)
//    public IRpcServiceReceiver rpcServiceReceiver(RpcServiceExecutor serviceExecutor, Environment env) {
//        IRpcServiceReceiver r = ReflectionTools.newInstance(RpcConfigInfo.INSTANCE.getServiceReceiverClass());
//        r.setServiceExecutor(serviceExecutor);
//        return r;
//    }
//    /**
//     * 初始化序列化器
//     * <p>  需要保证实现端自己的配置已经解析完毕才能执行
//     */
//    @Bean(BEAN_SERIALIZER_THREAD_POOL)
//    @Lazy(false)
//    public SerializeThreadPool serializeThreadPool() {
//    	SerializeThreadPool.INSTANCE_SERIALIZER = ReflectionTools.newInstance(RpcConfigInfo.INSTANCE.getSerializeClass());
//    	//	默认cpu核数 * 2
//    	int core = RpcConfigInfo.INSTANCE.getSerializePoolSize();
//    	if (core <= 0) { core = NettyRuntime.availableProcessors() * 2; }
//    	return SerializeThreadPool.INSTANCE = SerializeThreadPool.build(core);
//    }
//    
//    
//    /**
//     * 初始化拦截器链
//     * @throws LinkageError 
//     * @throws ClassNotFoundException 
//     */
//    @Bean(BEAN_INTERCEPTOR_CHAIN)
//    @Lazy(false)
//    public IRpcInterceptorChain rpcInterceptorChain(ApplicationContext context) throws ClassNotFoundException, LinkageError {
//    	IRpcInterceptorChain chain = new RpcInterceptorChain();
//    	//	加载公共拦截器
//    	for (String clazz : RpcConfigInfo.INSTANCE.getInterceptorChain()) {
//    		chain.append((IRpcInterceptor) BeanTools.getBeanOrNew(context, ClassUtils.forName(clazz, context.getClassLoader())));
//    	}
//    	return chain;
//    }
}
